/**
 * ivu input 设置获取焦点
 * @param {Element}  ivu 的 input dom对象
 */
export function ivuInputFocus (target) {
    if (target instanceof Element) {
        target.focus()
    }
}

/**
 * input集合中  触发当前input的下一个inputfocus
 * @params {Object} 事件对象
 * @params {NodeList} inputs 集合
 * @params {tagName} 触发事件的dom标签名（默认 input）
 */
export function nextFocus (event, list, reverse = false, tagName = 'input') {
    const target = event.srcElement ? event.srcElement : event.target
    if (target.tagName.toLocaleLowerCase() !== tagName) return
    const index = Array.prototype.indexOf.call(list, target)
    const step = reverse ? -1 : 1
    const next = findAbleInput(index + step, list, reverse)
    if (index > -1 && next) {
        ivuInputFocus(next)
    } else {
        target.blur()
    }
    return next || null
}

/**
 * 选中指定input  第i个无效时继续查找下一个有效的并选中
 * @parmas {Number} i
 * @params {NodeList} input集合
 */
export function focusIndexInput (i, list, reverse = false) {
    const target = findAbleInput(i, list, reverse)
    ivuInputFocus(target)
}

/**
 * 寻找有用的input 并返回第一个 未找到返回undefine
 * @params {Number} i 第i个开始
 * @params {NodeList} inputs 集合
 * @retrun {Node} 返回input节点
 */
function findAbleInput (i, list, reverse = false) {
    const target = list[i]
    if (target && (target.getAttribute('type') === 'hidden' || target.getAttribute('disabled'))) {
        const step = reverse ? -1 : 1
        return findAbleInput(i + step, list, reverse)
    } else {
        return target
    }
}
